﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace GesPro
{
    public partial class AccesPreferences : Form
    {
        public AccesPreferences()
        {
            InitializeComponent();

            BinaryFormatter BinSerializer = new BinaryFormatter();
            FileStream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg", FileMode.Open);
            Preferences preferences = (Preferences)BinSerializer.Deserialize(str);
            str.Close();

            tbCheminClasseurRapport.Text = Crypto.DecryptStringAES(preferences.ClasseurRapports, "GOD");
            tbCheminClasseurProjets.Text = Crypto.DecryptStringAES(preferences.ClasseurProjets, "GOD");
            tbCheminClasseurEmp.Text = Crypto.DecryptStringAES(preferences.ClasseurEmployes, "GOD");
            tbCheminRapportGenere.Text = Crypto.DecryptStringAES(preferences.RapportsGeneres, "GOD");
            tbEncodage.Text = Crypto.DecryptStringAES(preferences.MotEncodage, "GOD");
        }

        private void tbClasseurEmp_Click(object sender, EventArgs e)
        {
            RechercheDossier.ShowDialog();
            if (RechercheDossier.SelectedPath != string.Empty)
            {
                tbCheminClasseurEmp.Text = RechercheDossier.SelectedPath;    
            }
        }

        private void tbCheminClasseurProjets_Click(object sender, EventArgs e)
        {
            RechercheDossier.ShowDialog();
            if (RechercheDossier.SelectedPath != string.Empty)
            {
                tbCheminClasseurEmp.Text = RechercheDossier.SelectedPath;
            }
        }

        private void tbCheminClasseurRapport_Click(object sender, EventArgs e)
        {
            RechercheDossier.ShowDialog();
            if (RechercheDossier.SelectedPath != string.Empty)
            {
                tbCheminClasseurEmp.Text = RechercheDossier.SelectedPath;
            }
        }


        /// <summary>
        /// Méthode du bouton annuler. Ferme la fenêtre.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btPrefAnnuler_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// Méthode du bouton Ok. Enregistre les préférences et ferme la fenêtre.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btPrefOk_Click(object sender, EventArgs e)
        {
            Preferences preferences = new Preferences();
            preferences.ClasseurEmployes = Crypto.EncryptStringAES(tbCheminClasseurEmp.Text, "GOD");
            preferences.ClasseurProjets = Crypto.EncryptStringAES(tbCheminClasseurProjets.Text, "GOD");
            preferences.ClasseurRapports = Crypto.EncryptStringAES(tbCheminClasseurRapport.Text, "GOD");
            preferences.MotEncodage = Crypto.EncryptStringAES(tbEncodage.Text, "GOD");
            preferences.RapportsGeneres = Crypto.EncryptStringAES(tbCheminRapportGenere.Text, "GOD");

            Stream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath)+ "\\GesPro.cfg", FileMode.Create);
            BinaryFormatter BinSerializer = new BinaryFormatter();
            BinSerializer.Serialize(str, preferences);
            str.Close();



            this.Close();
        }

        /// <summary>
        /// Obtenir le Chemin vers le dossier du classeur de rapports.
        /// </summary>
        /// <returns>Chemin vers le dossier du classeur de rapports.</returns>
        public static string CheminClasseurRapports()
        {

            BinaryFormatter BinSerializer = new BinaryFormatter();
            FileStream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg", FileMode.Open);
            Preferences preferences = (Preferences)BinSerializer.Deserialize(str);
            str.Close();

            return Crypto.DecryptStringAES(preferences.ClasseurRapports, "GOD");
        }

        /// <summary>
        /// Obtenir le Chemin vers le dossier du classeur de projets.
        /// </summary>
        /// <returns>Chemin vers le dossier du classeur de projets.</returns>
        public static string CheminClasseurProjets()
        {

            BinaryFormatter BinSerializer = new BinaryFormatter();
            FileStream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg", FileMode.Open);
            Preferences preferences = (Preferences)BinSerializer.Deserialize(str);
            str.Close();

            return Crypto.DecryptStringAES(preferences.ClasseurProjets, "GOD");
        }

        /// <summary>
        /// Obtenir le Chemin vers le dossier du classeur d'employés.
        /// </summary>
        /// <returns>Chemin vers le dossier du classeur d'employés.</returns>
        public static string CheminClasseurEmployes()
        {

            BinaryFormatter BinSerializer = new BinaryFormatter();
            FileStream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg", FileMode.Open);
            Preferences preferences = (Preferences)BinSerializer.Deserialize(str);
            str.Close();

            return Crypto.DecryptStringAES(preferences.ClasseurEmployes, "GOD");
        }

        /// <summary>
        /// Obtenir le Chemin vers le dossier ou les rapports sont générés.
        /// </summary>
        /// <returns>Chemin vers le dossier ou les rapports sont générés.</returns>
        public static string CheminRapportsGeneres()
        {

            BinaryFormatter BinSerializer = new BinaryFormatter();
            FileStream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg", FileMode.Open);
            Preferences preferences = (Preferences)BinSerializer.Deserialize(str);
            str.Close();

            return Crypto.DecryptStringAES(preferences.RapportsGeneres, "GOD");
        
        }

        /// <summary>
        /// Obtenir la clé d'encryption des donnés.
        /// </summary>
        /// <returns>Clé d'encryption</returns>
        public static string ObtenirMotEncodage()
        {
            BinaryFormatter BinSerializer = new BinaryFormatter();
            FileStream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg", FileMode.Open);
            Preferences preferences = (Preferences)BinSerializer.Deserialize(str);
            str.Close();

            return Crypto.DecryptStringAES(preferences.MotEncodage,"GOD");
        
        }

        /// <summary>
        /// Création d'un fichier de configuration ayant des valeurs par défaut.
        /// </summary>
        public static void CréerFichierConfig()
        {
            Preferences preferences = new Preferences();
            preferences.ClasseurEmployes = Crypto.EncryptStringAES( Environment.CurrentDirectory , "GOD");
            preferences.ClasseurProjets = Crypto.EncryptStringAES(Environment.CurrentDirectory, "GOD");
            preferences.ClasseurRapports = Crypto.EncryptStringAES(Environment.CurrentDirectory, "GOD");
            preferences.RapportsGeneres = Crypto.EncryptStringAES(Environment.CurrentDirectory, "GOD");
            preferences.MotEncodage = Crypto.EncryptStringAES("123", "GOD");

            Stream str = File.Open(Path.GetDirectoryName(Application.ExecutablePath) + "\\GesPro.cfg", FileMode.Create);
            BinaryFormatter BinSerializer = new BinaryFormatter();
            BinSerializer.Serialize(str, preferences);
            str.Close();
        
        }

        private void tbCheminRapportGenere_Click(object sender, EventArgs e)
        {
            RechercheDossier.ShowDialog();
            if (RechercheDossier.SelectedPath != string.Empty)
            {
                tbCheminClasseurEmp.Text = RechercheDossier.SelectedPath;
            }
        }

    }
}
